package com.Maykk.Demo04;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * @ClassName: ReceiveThread
 * @Description: TODO 接收线程
 * @Author: MaykkStar@163.com
 */
public class ReceiveThread implements Runnable {
    // 设置端口号传递
    private Integer port;

    public ReceiveThread(Integer port) {
        this.port = port;
    }

    @Override
    public void run() {
        DatagramSocket ds = null;
        try {
            try {
                // 实例化接收 Socket 对象
                ds = new DatagramSocket(port);
            } catch (IOException ee) {
                System.err.println("当前用户已登录，请重新运行程序！~");
                System.exit(0);
            }

            // 输出登录对象
            System.out.println(Thread.currentThread().getName() + " 登陆成功！~");

            while (true) {
                // 创建接收数据缓冲区
                byte[] bytes = new byte[1024];
                // 创建数据包
                DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
                // 接收
                ds.receive(dp);

                // 拆分信息内容，data[0]中存储的是用户名，data[1]中存储的是发送的消息
                String[] data = new String(dp.getData(), 0, dp.getLength()).split("#@@#");
                if (data.length < 1) break;
                // 判断是否为自己发的信息，如果data[0]内容与当前用户名不相同的话就输出内容
                if (!data[0].equals(Thread.currentThread().getName())) {
                    System.out.println(data[0] + " > " + data[1]);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ds.close();
        }
    }
}
